/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package TableBean;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author Hector
 */
@Entity
@Table(name = "actividad")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Actividad.findAll", query = "SELECT a FROM Actividad a"),
    @NamedQuery(name = "Actividad.findByIdActividad", query = "SELECT a FROM Actividad a WHERE a.idActividad = :idActividad"),
    @NamedQuery(name = "Actividad.findByNombre", query = "SELECT a FROM Actividad a WHERE a.nombre = :nombre"),
    @NamedQuery(name = "Actividad.findByFechaInicioProgramado", query = "SELECT a FROM Actividad a WHERE a.fechaInicioProgramado = :fechaInicioProgramado"),
    @NamedQuery(name = "Actividad.findByFechaFinProgramado", query = "SELECT a FROM Actividad a WHERE a.fechaFinProgramado = :fechaFinProgramado"),
    @NamedQuery(name = "Actividad.findByFechaInicioReal", query = "SELECT a FROM Actividad a WHERE a.fechaInicioReal = :fechaInicioReal"),
    @NamedQuery(name = "Actividad.findByFechaFinReal", query = "SELECT a FROM Actividad a WHERE a.fechaFinReal = :fechaFinReal")})
public class Actividad implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "id_actividad")
    private Integer idActividad;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 200)
    @Column(name = "nombre")
    private String nombre;
    @Basic(optional = false)
    @NotNull
    @Column(name = "fecha_inicio_programado")
    @Temporal(TemporalType.DATE)
    private Date fechaInicioProgramado;
    @Basic(optional = false)
    @NotNull
    @Column(name = "fecha_fin_programado")
    @Temporal(TemporalType.DATE)
    private Date fechaFinProgramado;
    @Basic(optional = false)
    @NotNull
    @Column(name = "fecha_inicio_real")
    @Temporal(TemporalType.DATE)
    private Date fechaInicioReal;
    @Basic(optional = false)
    @NotNull
    @Column(name = "fecha_fin_real")
    @Temporal(TemporalType.DATE)
    private Date fechaFinReal;
    @JoinColumn(name = "id_proyecto", referencedColumnName = "id_proyecto")
    @ManyToOne(optional = false)
    private Proyecto idProyecto;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "actividad")
    private List<RecursoActividad> recursoActividadList;

    public Actividad() {
    }

    public Actividad(Integer idActividad) {
        this.idActividad = idActividad;
    }

    public Actividad(Integer idActividad, String nombre, Date fechaInicioProgramado, Date fechaFinProgramado, Date fechaInicioReal, Date fechaFinReal) {
        this.idActividad = idActividad;
        this.nombre = nombre;
        this.fechaInicioProgramado = fechaInicioProgramado;
        this.fechaFinProgramado = fechaFinProgramado;
        this.fechaInicioReal = fechaInicioReal;
        this.fechaFinReal = fechaFinReal;
    }

    public Integer getIdActividad() {
        return idActividad;
    }

    public void setIdActividad(Integer idActividad) {
        this.idActividad = idActividad;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public Date getFechaInicioProgramado() {
        return fechaInicioProgramado;
    }

    public void setFechaInicioProgramado(Date fechaInicioProgramado) {
        this.fechaInicioProgramado = fechaInicioProgramado;
    }

    public Date getFechaFinProgramado() {
        return fechaFinProgramado;
    }

    public void setFechaFinProgramado(Date fechaFinProgramado) {
        this.fechaFinProgramado = fechaFinProgramado;
    }

    public Date getFechaInicioReal() {
        return fechaInicioReal;
    }

    public void setFechaInicioReal(Date fechaInicioReal) {
        this.fechaInicioReal = fechaInicioReal;
    }

    public Date getFechaFinReal() {
        return fechaFinReal;
    }

    public void setFechaFinReal(Date fechaFinReal) {
        this.fechaFinReal = fechaFinReal;
    }

    public Proyecto getIdProyecto() {
        return idProyecto;
    }

    public void setIdProyecto(Proyecto idProyecto) {
        this.idProyecto = idProyecto;
    }

    @XmlTransient
    public List<RecursoActividad> getRecursoActividadList() {
        return recursoActividadList;
    }

    public void setRecursoActividadList(List<RecursoActividad> recursoActividadList) {
        this.recursoActividadList = recursoActividadList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idActividad != null ? idActividad.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Actividad)) {
            return false;
        }
        Actividad other = (Actividad) object;
        if ((this.idActividad == null && other.idActividad != null) || (this.idActividad != null && !this.idActividad.equals(other.idActividad))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "[" + idActividad + "] " + nombre;
    }
    
}
